package com.example.easypan.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.easypan.common.Result;
import com.example.easypan.mapper.FileInfoMapper;
import com.example.easypan.pojo.FileInfo;
import com.example.easypan.service.FileInfoService;
import com.example.easypan.service.impl.FileInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 功能：
 * 作者：cyan
 * 日期：2025/3/21 下午7:14
 */
@RestController
@RequestMapping("/redis")
public class RedisController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private FileInfoServiceImpl fileInfoService;


//    @PostMapping("/getUseSpace")
//    public Result getUserSpace() {
//        LambdaQueryWrapper<FileInfo> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(FileInfo::getDelFlag, 2);
//        List<FileInfo> list = fileInfoService.list(wrapper);
//
//        // 使用 Java 8 Stream API 进行求和，避免空指针异常
//        Long userTotal = list.stream()
//                .map(FileInfo::getFileSize)
//                .filter(size -> size != null)
//                .mapToLong(Long::longValue)
//                .sum();
//
//        // 将字节转换为 MB
//        double userTotalInMB = (double) userTotal / (1024 * 1024);
//
//        // 返回包含总大小（MB）的结果
//        return Result.success(userTotalInMB);
//    }

    // 静态方法：计算文件总大小（MB）
    public static double calculateUserTotalInMB(FileInfoService fileInfoService) {
        LambdaQueryWrapper<FileInfo> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(FileInfo::getDelFlag, 2);
        List<FileInfo> list = fileInfoService.list(wrapper);

        // 使用 Java 8 Stream API 进行求和，避免空指针异常
        Long userTotal = list.stream()
                .map(FileInfo::getFileSize)
                .filter(size -> size != null)
                .mapToLong(Long::longValue)
                .sum();

        // 将字节转换为 MB
        return (double) userTotal / (1024 * 1024);
    }


    @PostMapping("/a")
    public Result testString() {
        // 调用静态方法获取文件总大小（MB）
        double userTotalInMB = calculateUserTotalInMB(fileInfoService);
        // 将 double 类型的数据转换为字符串
        String dataStr = String.valueOf(userTotalInMB);
        // 写入数据到 Redis
        stringRedisTemplate.opsForValue().set("user:a:10", dataStr);

        // 尝试获取刚刚设置的值
        String retrievedValue = stringRedisTemplate.opsForValue().get("user:a:10");

        // 判断获取的值是否与设置的值相等
        if (dataStr.equals(retrievedValue)) {
            return Result.success("更新成功，当前用户空间 "+ String.format("%.2f", userTotalInMB) +"MB",String.format("%.2f", userTotalInMB));
        } else {
            return Result.error("更新失败");
        }
    }

}